﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ProjetoJornada_DAL.Repositorio;
using Basicas;
using Basicas.Utils;
using Basicas.Utils.excecoes;

namespace ProjetoJornada_Negocios.Negocio
{
    public class NegocioCurso
    {
        private RepCurso repCurso;

        public NegocioCurso()
        {
            repCurso = new RepCurso();
        }

        #region Metodos
        public int InserirCurso(Curso curso)
        {
            try
            {
                return this.repCurso.InserirCurso(curso);
            }
            catch (Exception ex)
            {
                Auxiliar.GravaLog(ex.Message, "inserirCursoNegocio");
                throw ex;
            }
        }
        public Boolean RemoverCurso(Int32 idCurso)
        {
            try
            {
                Curso curso = this.repCurso.ConsultarCursoPorId(idCurso);

                if (curso == null)
                {
                    throw new CursoInexistenteException();
                }
                else
                {
                    return this.repCurso.RemoverCurso(idCurso);
                }
            }
            catch (Exception ex)
            {
                Auxiliar.GravaLog(ex.Message, "removerCursoNegocio");
                throw ex;
            }
        }
        public Boolean EditarCurso(Curso curso)
        {
            try
            {
                if (curso.Imagem != null)
                {
                    return this.repCurso.EditarCurso(curso);
                }
                else
                {
                    return this.repCurso.EditarSemLogo(curso);                
                }                
            }
            catch (Exception ex)
            {
                Auxiliar.GravaLog(ex.Message, "editarCursoNegocio");
                throw ex;
            }
        }
        public List<Curso> ConsultarTodosCursos()
        {
            try
            {
                List<Curso> cursos = this.repCurso.ConsultarTodosCursos();

                if (cursos.Count == 0)
                {
                    throw new NenhumCursoCadastradoException();
                }
                else
                {
                    return cursos;
                }
            }
            catch (Exception ex)
            {
                Auxiliar.GravaLog(ex.Message, "consultarTodosCursosNegocio");
                throw ex;
            }
        }
        public Curso ConsultarCursoPorId(Int32 idCurso)
        {
            try
            {
                Curso curso = this.repCurso.ConsultarCursoPorId(idCurso);

                if (curso == null)
                {
                    throw new CursoInexistenteException();
                }
                else
                {
                    return curso;
                }
            }
            catch (Exception ex)
            {
                Auxiliar.GravaLog(ex.Message, "consultarCursoPorIdNegocio");
                throw ex;
            }
        }
        public Curso ConsultarCursoPorJornada(Int32 idJornada)
        {
            try
            {
                return this.repCurso.ConsultarCursoPorId(idJornada);
            }
            catch (Exception ex)
            {
                Auxiliar.GravaLog(ex.Message, "consultarCursoPorJornadaNegocio");
                throw ex;
            }         
        }
        public byte[] ConsultarLogo(int idCurso)
        {
            try
            {
                return repCurso.ConsultarLogo(idCurso);
            }
            catch (Exception ex)
            {
                Auxiliar.GravaLog(ex.Message, "ConsultarLogo - Negocio");
                throw ex;            
            }
        }
        #endregion
    }
}
